package com.okilo.online.app.tools.manager

import android.app.Activity
import com.okilo.online.app.dialog.LoadingConfig
import com.okilo.online.app.dialog.OkiloLoadingDlog
import java.lang.ref.WeakReference

/**
 * 加载对话框管理器
 */
class OkiloLoadingManager(activity: Activity) {

    private val activityRef = WeakReference(activity)
    private var loadingDialog: OkiloLoadingDlog? = null
    private var isShowing = false

    /**
     * 显示加载对话框（使用默认配置）
     */
    fun showLoading() {
        showLoading(LoadingConfig())
    }

    /**
     * 显示带消息的加载对话框
     * @param message 加载提示信息
     */
    fun showLoading(message: String) {
        showLoading(LoadingConfig(message = message))
    }

    /**
     * 显示加载对话框（完整配置）
     * @param config 加载对话框配置
     */
    fun showLoading(config: LoadingConfig) {
        val activity = activityRef.get() ?: return

        // 检查Activity状态
        if (activity.isFinishing || activity.isDestroyed) {
            return
        }

        // 如果正在显示，先更新消息
        if (isShowing) {
            updateLoadingMessage(config.message)
            return
        }

        // 创建并显示加载对话框
        loadingDialog = createLoadingDialog(activity, config)
        loadingDialog?.show()
        isShowing = true
    }

    /**
     * 隐藏加载对话框
     */
    fun dismissLoading() {
        val activity = activityRef.get() ?: return

        // 检查Activity状态
        if (activity.isFinishing || activity.isDestroyed) {
            loadingDialog = null
            isShowing = false
            return
        }

        if (isShowing) {
            loadingDialog?.dismiss()
            loadingDialog = null
            isShowing = false
        }
    }

    /**
     * 更新加载消息
     * @param message 新的加载消息
     */
    fun updateLoadingMessage(message: String) {
        if (isShowing) {
            loadingDialog?.updateMessage(message)
        }
    }

    /**
     * 显示进度加载对话框（如果需要显示进度）
     * @param progress 进度值 (0-100)
     * @param message 进度消息
     */
    fun showProgressLoading(progress: Int, message: String = "") {
        // 这里可以根据需要扩展进度显示功能
        showLoading("$message ($progress%)")
    }

    /**
     * 检查是否正在显示加载对话框
     * @return 是否正在显示
     */
    fun isLoadingShowing(): Boolean {
        return isShowing && loadingDialog?.isShowing == true
    }

    /**
     * 设置加载对话框配置
     * 注意：此方法只在对话框未显示时有效
     */
    fun setLoadingConfig(config: LoadingConfig) {
        if (!isShowing) {
            // 可以保存配置，在下次显示时使用
        }
    }

    /**
     * 创建加载对话框
     */
    private fun createLoadingDialog(activity: Activity, config: LoadingConfig): OkiloLoadingDlog {
        return OkiloLoadingDlog.create(activity, config).apply {
            setOnDismissListener {
                this@OkiloLoadingManager.isShowing = false
                loadingDialog = null
            }

            setOnCancelListener {
                this@OkiloLoadingManager.isShowing = false
                loadingDialog = null
            }
        }
    }

    /**
     * 安全地重新创建加载对话框（在配置变更等情况下使用）
     */
    fun recreateLoadingDialog() {
        if (isShowing) {
            val currentMessage = loadingDialog?.let { dialog ->
                // 获取当前消息（如果需要保持状态）
                ""
            } ?: ""

            dismissLoading()
            showLoading(currentMessage)
        }
    }
}